Функция box.once
-
box.once(key, function[, ...])¶ Выполнение функции при условии, что она раньше не выполнялась. Передаваемое значение проверяется на предмет того, выполнялась ли функция. Если она выполнялась, ничего не происходит. В противном случае вызывается функция.
См. пример использования
box.once()во время настройки набора реплик.Если в
box.once()возникает ошибка во время инициализации базы данных, можно повторно запустить невыполненный блокbox.once(), не останавливая базу данных. Для этого удалите объектonceиз системного спейса _schema. Введите командуbox.space._schema:select{}, найдите объектonceи удалите его. Например, повторное выполнение блокаkey='hello':Когда
box.once()используется для инициализации, следует подождать, пока база данных не будет в нужном состоянии (только для чтения или для чтения и записи). Для этого см. функции во Вложенный модуль box.ctl.tarantool> box.space._schema:select{} --- - - ['cluster', 'b4e15788-d962-4442-892e-d6c1dd5d13f2'] - ['max_id', 512] - ['oncebye'] - ['oncehello'] - ['version', 1, 7, 2] ... tarantool> box.space._schema:delete('oncehello') --- - ['oncehello'] ... tarantool> box.once('hello', function() end) --- ...
Параметры: - key (
string) – значение для проверки - function (
function) – функция - ... – аргументы, которые следует передать в функцию
Примечание
Параметр
keyсохраняется в системном спейсе _schema после вызоваbox.once(), чтобы предотвратить повторный вызов по ключу. Эти ключи распространяются на набор реплик. Поэтому одновременный вызовbox.onceс одинаковыми ключами на двух экземплярах одного набора реплик может быть успешным, но приведет к конфликту транзакций.- key (